<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<style>
body {
  font-family: Helvetica, arial, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: white;
  padding: 30px; }

body > *:first-child {
  margin-top: 0 !important; }
body > *:last-child {
  margin-bottom: 0 !important; }

a {
  color: #4183C4; }
a.absent {
  color: #cc0000; }
a.anchor {
  display: block;
  padding-left: 30px;
  margin-left: -30px;
  cursor: pointer;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0; }

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
  cursor: text;
  position: relative; }

h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
  background: url() no-repeat 10px center;
  text-decoration: none; }

h1 tt, h1 code {
  font-size: inherit; }

h2 tt, h2 code {
  font-size: inherit; }

h3 tt, h3 code {
  font-size: inherit; }

h4 tt, h4 code {
  font-size: inherit; }

h5 tt, h5 code {
  font-size: inherit; }

h6 tt, h6 code {
  font-size: inherit; }

h1 {
  font-size: 28px;
  color: black; }

h2 {
  font-size: 24px;
  border-bottom: 1px solid #cccccc;
  color: black; }

h3 {
  font-size: 18px; }

h4 {
  font-size: 16px; }

h5 {
  font-size: 14px; }

h6 {
  color: #777777;
  font-size: 14px; }

p, blockquote, ul, ol, dl, li, table, pre {
  margin: 15px 0; }

hr {
  background: transparent url() repeat-x 0 0;
  border: 0 none;
  color: #cccccc;
  height: 4px;
  padding: 0;
}

body > h2:first-child {
  margin-top: 0;
  padding-top: 0; }
body > h1:first-child {
  margin-top: 0;
  padding-top: 0; }
  body > h1:first-child + h2 {
    margin-top: 0;
    padding-top: 0; }
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
  margin-top: 0;
  padding-top: 0; }

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0; }

h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
  margin-top: 0; }

li p.first {
  display: inline-block; }
li {
  margin: 0; }
ul, ol {
  padding-left: 30px; }

ul :first-child, ol :first-child {
  margin-top: 0; }

dl {
  padding: 0; }
  dl dt {
    font-size: 14px;
    font-weight: bold;
    font-style: italic;
    padding: 0;
    margin: 15px 0 5px; }
    dl dt:first-child {
      padding: 0; }
    dl dt > :first-child {
      margin-top: 0; }
    dl dt > :last-child {
      margin-bottom: 0; }
  dl dd {
    margin: 0 0 15px;
    padding: 0 15px; }
    dl dd > :first-child {
      margin-top: 0; }
    dl dd > :last-child {
      margin-bottom: 0; }

blockquote {
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

table {
  padding: 0;border-collapse: collapse; }
  table tr {
    border-top: 1px solid #cccccc;
    background-color: white;
    margin: 0;
    padding: 0; }
    table tr:nth-child(2n) {
      background-color: #f8f8f8; }
    table tr th {
      font-weight: bold;
      border: 1px solid #cccccc;
      margin: 0;
      padding: 6px 13px; }
    table tr td {
      border: 1px solid #cccccc;
      margin: 0;
      padding: 6px 13px; }
    table tr th :first-child, table tr td :first-child {
      margin-top: 0; }
    table tr th :last-child, table tr td :last-child {
      margin-bottom: 0; }

img {
  max-width: 100%; }

span.frame {
  display: block;
  overflow: hidden; }
  span.frame > span {
    border: 1px solid #dddddd;
    display: block;
    float: left;
    overflow: hidden;
    margin: 13px 0 0;
    padding: 7px;
    width: auto; }
  span.frame span img {
    display: block;
    float: left; }
  span.frame span span {
    clear: both;
    color: #333333;
    display: block;
    padding: 5px 0 0; }
span.align-center {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-center > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: center; }
  span.align-center span img {
    margin: 0 auto;
    text-align: center; }
span.align-right {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-right > span {
    display: block;
    overflow: hidden;
    margin: 13px 0 0;
    text-align: right; }
  span.align-right span img {
    margin: 0;
    text-align: right; }
span.float-left {
  display: block;
  margin-right: 13px;
  overflow: hidden;
  float: left; }
  span.float-left span {
    margin: 13px 0 0; }
span.float-right {
  display: block;
  margin-left: 13px;
  overflow: hidden;
  float: right; }
  span.float-right > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: right; }

code, tt {
  margin: 0 2px;
  padding: 0 5px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px; }

pre code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent; }

.highlight pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }

pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }
  pre code, pre tt {
    background-color: transparent;
    border: none; }

sup {
    font-size: 0.83em;
    vertical-align: super;
    line-height: 0;
}
* {
	-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
    body {
        width: 854px;
        margin:0 auto;
    }
}
@media print {
	table, pre {
		page-break-inside: avoid;
	}
	pre {
		word-wrap: break-word;
	}
}
</style>
<title>验证</title>

</head>
<body>
<h1>验证</h1>

<ul>
<li><p><a href="#basic-usage">基础使用</a></p></li>
<li><p><a href="#working-with-error-messages">附带错误消息</a></p></li>
<li><p><a href="#error-messages-and-views">错误消息 &amp; 视图</a></p></li>
<li><p><a href="#available-validation-rules">可用的验证规则</a></p></li>
<li><p><a href="#custom-error-messages">定制错误消息</a></p></li>
<li><p><a href="#custom-validation-rules">定制验证规则</a></p></li>
</ul>


<p><a name="basic-usage"></a></p>

<h2>基本使用</h2>

<p>Laravel 自带一个简单、方便的 <code>Validation</code> 类用关于验证数据以及获取错误消息。</p>

<p><strong>基础验证例子</strong></p>

<pre><code>$validator = Validator::make(

    array('name' =&gt; 'Dayle'),

    array('name' =&gt; 'required|min:5')

);
</code></pre>

<p>传递给 <code>make</code> 函数的第一个参数是待验证的数据，第二个参数是对该数据需要应用的验证规则。</p>

<p>多个验证规则可以通过 "|" 字符进行隔开，或者作为数组的一个单独的元素。</p>

<p><strong>通过数组指定验证规则</strong></p>

<pre><code>$validator = Validator::make(

    array('name' =&gt; 'Dayle'),

    array('name' =&gt; array('required', 'min:5'))

);
</code></pre>

<p>一旦一个 <code>Validator</code> 实例被创建，可以使用 <code>fails</code> （或者 <code>passes</code>）函数执行这个验证。</p>

<pre><code>if ($validator-&gt;fails())

{

    // The given data did not pass validation

}
</code></pre>

<p>如果验证失败，您可以从验证器中获取错误消息。</p>

<pre><code>$messages = $validator-&gt;messages();
</code></pre>

<p>您也可以使用 <code>failed</code> 函数得到不带错误消息的没有通过验证的规则的数组。</p>

<pre><code>$failed = $validator-&gt;failed();
</code></pre>

<p><strong>文件验证</strong></p>

<p><code>Validator</code> 类提供了一些验证规则用于验证文件，比如 <code>size</code>、<code>mimes</code>等。在验证文件的时候，您可以和其他验证一样传递给验证器。</p>

<p><a name="working-with-error-messages"></a></p>

<h2>附带错误消息</h2>

<p>在一个 <code>Validator</code> 实例上调用 <code>messages</code> 函数之后，将会得到一个 <code>MessageBag</code> 实例，该实例拥有很多处理错误消息的方便的函数。</p>

<p><strong>获取一个域的第一个错误消息</strong></p>

<pre><code>echo $messages-&gt;first('email');
</code></pre>

<p><strong>获取一个域的全部错误消息</strong></p>

<pre><code>foreach ($messages-&gt;get('email') as $message)

{

    //

}
</code></pre>

<p><strong>获取全部域的全部错误消息</strong></p>

<pre><code>foreach ($messages-&gt;all() as $message)

{

    //

}
</code></pre>

<p><strong>检查一个域是否存在消息</strong></p>

<pre><code>if ($messages-&gt;has('email'))

{

    //

}
</code></pre>

<p><strong>以某种格式获取一条错误消息</strong></p>

<pre><code>echo $messages-&gt;first('email', '&lt;p&gt;:message&lt;/p&gt;');
</code></pre>

<blockquote><p><strong>注意:</strong> 默认情况下，消息将使用与 Bootstrap 兼容的语法进行格式化。</p></blockquote>

<p><strong>以某种格式获取所有错误消息</strong></p>

<pre><code>foreach ($messages-&gt;all('&lt;li&gt;:message&lt;/li&gt;') as $message)

{

    //

}
</code></pre>

<p><a name="error-messages-and-views"></a></p>

<h2>错误消息 &amp; 视图</h2>

<p>一旦您执行了验证，您需要一种简单的方法向视图反馈错误消息。这在 Lavavel 中能够方便的处理。以下面的路由作为例子：</p>

<pre><code>Route::get('register', function()

{

    return View::make('user.register');

});



Route::post('register', function()

{

    $rules = array(...);



    $validator = Validator::make(Input::all(), $rules);



    if ($validator-&gt;fails())

    {

        return Redirect::to('register')-&gt;withErrors($validator);

    }

});
</code></pre>

<p>注意当验证失败，我们使用 <code>withErrors</code> 函数把 <code>Validator</code> 实例传递给 Redirect。这个函数将刷新 Session 中保存的错误消息，使得在下次请求中能够可用。</p>

<p>然而，注意我们没有必要明确的在 GET 路由中绑定错误消息到路由。这是因为 Laravel 总会检查 Session 中的错误，并自动绑定它们到视图如果它们是可用的。<strong>所以，对于每个请求，一个 <code>$errors</code> 变量在所有视图中总是可用的</strong>，允许您方便的认为 <code>$errors</code> 总是被定义并可以安全使用的。<code>$errors</code> 变量将是一个 <code>MessageBag</code> 类的实例。</p>

<p>所以，在跳转之后，您可以在视图中使用自动绑定的 <code>$errors</code> 变量：</p>

<pre><code>&lt;?php echo $errors-&gt;first('email'); ?&gt;
</code></pre>

<p><a name="available-validation-rules"></a></p>

<h2>可用的验证规则</h2>

<p>下面是一个所有可用的验证规则的列表以及它们的功能：</p>

<ul>
<li><p><a href="#rule-accepted">Accepted</a></p></li>
<li><p><a href="#rule-active-url">Active URL</a></p></li>
<li><p><a href="#rule-after">After (Date)</a></p></li>
<li><p><a href="#rule-alpha">Alpha</a></p></li>
<li><p><a href="#rule-alpha-dash">Alpha Dash</a></p></li>
<li><p><a href="#rule-alpha-num">Alpha Numeric</a></p></li>
<li><p><a href="#rule-before">Before (Date)</a></p></li>
<li><p><a href="#rule-between">Between</a></p></li>
<li><p><a href="#rule-confirmed">Confirmed</a></p></li>
<li><p><a href="#rule-date">Date</a></p></li>
<li><p><a href="#rule-date-format">Date Format</a></p></li>
<li><p><a href="#rule-different">Different</a></p></li>
<li><p><a href="#rule-email">E-Mail</a></p></li>
<li><p><a href="#rule-exists">Exists (Database)</a></p></li>
<li><p><a href="#rule-image">Image (File)</a></p></li>
<li><p><a href="#rule-in">In</a></p></li>
<li><p><a href="#rule-integer">Integer</a></p></li>
<li><p><a href="#rule-ip">IP Address</a></p></li>
<li><p><a href="#rule-max">Max</a></p></li>
<li><p><a href="#rule-mimes">MIME Types</a></p></li>
<li><p><a href="#rule-min">Min</a></p></li>
<li><p><a href="#rule-not-in">Not In</a></p></li>
<li><p><a href="#rule-numeric">Numeric</a></p></li>
<li><p><a href="#rule-regex">Regular Expression</a></p></li>
<li><p><a href="#rule-required">Required</a></p></li>
<li><p><a href="#rule-required-if">Required If</a></p></li>
<li><p><a href="#rule-required-with">Required With</a></p></li>
<li><p><a href="#rule-required-without">Required Without</a></p></li>
<li><p><a href="#rule-same">Same</a></p></li>
<li><p><a href="#rule-size">Size</a></p></li>
<li><p><a href="#rule-unique">Unique (Database)</a></p></li>
<li><p><a href="#rule-url">URL</a></p></li>
</ul>


<p><a name="rule-accepted"></a></p>

<h4>accepted</h4>

<p>验证此规则的值必须是 <em>yes</em>、 <em>on</em> 或者是 <em>1</em>。这在验证是否同意"服务条款"的时候非常有用。</p>

<p><a name="rule-active-url"></a></p>

<h4>active_url</h4>

<p>验证此规则的值必须是一个合法的 URL，根据 PHP 函数 <code>checkdnsrr</code>。</p>

<p><a name="rule-after"></a></p>

<h4>after:<em>date</em></h4>

<p>验证此规则的值必须在给定日期之后，日期将通过 PHP 函数 <code>strtotime</code> 传递。</p>

<p><a name="rule-alpha"></a></p>

<h4>alpha</h4>

<p>验证此规则的值必须全部由字母字符构成。</p>

<p><a name="rule-alpha-dash"></a></p>

<h4>alpha_dash</h4>

<p>验证此规则的值必须全部由字母、数字、中划线或下划线字符构成。</p>

<p><a name="rule-alpha-num"></a></p>

<h4>alpha_num</h4>

<p>验证此规则的值必须全部由字母和数字构成。</p>

<p><a name="rule-before"></a></p>

<h4>before:<em>date</em></h4>

<p>验证此规则的值必须在给定日期之前，日期将通过 PHP 函数 <code>strtotime</code> 传递。</p>

<p><a name="rule-between"></a></p>

<h4>between:<em>min</em>,<em>max</em></h4>

<p>验证此规则的值必须在给定的 <em>min</em> 和 <em>max</em> 之间。字符串、数字以及文件都将使用大小规则进行比较。</p>

<p><a name="rule-confirmed"></a></p>

<h4>confirmed</h4>

<p>验证此规则的值必须和 <code>foo_confirmation</code> 的值相同。比如，需要验证此规则的域是 <code>password</code>，那么在输入中必须有一个与之相同的 <code>password_confirmation</code> 域。</p>

<p><a name="rule-date"></a></p>

<h4>date</h4>

<p>验证此规则的值必须是一个合法的日期，根据 PHP 函数 <code>strtotime</code>。</p>

<p><a name="rule-date-format"></a></p>

<h4>date_format:<em>format</em></h4>

<p>验证此规则的值必须符合给定的 <em>format</em> 的格式，根据 PHP 函数 <code>date_parse_from_format</code>。</p>

<p><a name="rule-different"></a></p>

<h4>different:<em>field</em></h4>

<p>验证此规则的值必须与指定的 <em>field</em> 域的值不同。</p>

<p><a name="rule-email"></a></p>

<h4>email</h4>

<p>验证此规则的值必须是一个合法的电子邮件地址。</p>

<p><a name="rule-exists"></a></p>

<h4>exists:<em>table</em>,<em>column</em></h4>

<p>验证此规则的值必须在指定的数据库的表中存在。</p>

<p><strong>Exists 规则的基础使用</strong></p>

<pre><code>'state' =&gt; 'exists:states'
</code></pre>

<p><strong>指定列名</strong></p>

<pre><code>'state' =&gt; 'exists:states,abbreviation'
</code></pre>

<p>您也可以指定更多的条件，将以 "where" 的形式添加到查询。</p>

<pre><code>'email' =&gt; 'exists:staff,email,account_id,1'
</code></pre>

<p><a name="rule-image"></a></p>

<h4>image</h4>

<p>验证此规则的值必须是一个图片 (jpeg, png, bmp 或者 gif)。</p>

<p><a name="rule-in"></a></p>

<h4>in:<em>foo</em>,<em>bar</em>,...</h4>

<p>验证此规则的值必须在给定的列表中存在。</p>

<p><a name="rule-integer"></a></p>

<h4>integer</h4>

<p>验证此规则的值必须是一个整数。</p>

<p><a name="rule-ip"></a></p>

<h4>ip</h4>

<p>验证此规则的值必须是一个合法的 IP 地址。</p>

<p><a name="rule-max"></a></p>

<h4>max:<em>value</em></h4>

<p>验证此规则的值必须小于最大值 <em>value</em>。字符串、数字以及文件都将使用大小规则进行比较。</p>

<p><a name="rule-mimes"></a></p>

<h4>mimes:<em>foo</em>,<em>bar</em>,...</h4>

<p>验证此规则的文件的 MIME 类型必须在给定的列表中。</p>

<p><strong>MIME 规则的基础使用</strong></p>

<pre><code>'photo' =&gt; 'mimes:jpeg,bmp,png'
</code></pre>

<p><a name="rule-min"></a></p>

<h4>min:<em>value</em></h4>

<p>验证此规则的值必须大于最小值 <em>value</em>。字符串、数字以及文件都将使用大小规则进行比较。</p>

<p><a name="rule-not-in"></a></p>

<h4>not_in:<em>foo</em>,<em>bar</em>,...</h4>

<p>验证此规则的值必须在给定的列表中不存在。</p>

<p><a name="rule-numeric"></a></p>

<h4>numeric</h4>

<p>验证此规则的值必须是一个数字。</p>

<p><a name="rule-regex"></a></p>

<h4>regex:<em>pattern</em></h4>

<p>验证此规则的值必须符合给定的正则表达式。</p>

<p><strong>注意:</strong> 当使用 <code>regex</code> 模式的时候，有必要使用数组指定规则，而不是管道分隔符，特别是正则表达式中包含一个管道字符的时候。</p>

<p><a name="rule-required"></a></p>

<h4>required</h4>

<p>验证此规则的值必须在输入数据中存在。</p>

<p><a name="rule-required-if"></a></p>

<h4>required_if:<em>field</em>,<em>value</em></h4>

<p>当指定的域为某个值的时候，验证此规则的值必须存在。</p>

<p><a name="rule-required-with"></a></p>

<h4>required_with:<em>foo</em>,<em>bar</em>,...</h4>

<p><em>仅当</em>指定的域存在的时候，验证此规则的值必须存在。</p>

<p><a name="rule-required-without"></a></p>

<h4>required_without:<em>foo</em>,<em>bar</em>,...</h4>

<p><em>仅当</em>指定的域不存在的时候，验证此规则的值必须存在。</p>

<p><a name="rule-same"></a></p>

<h4>same:<em>field</em></h4>

<p>验证此规则的值必须与给定域的值相同。</p>

<p><a name="rule-size"></a></p>

<h4>size:<em>value</em></h4>

<p>验证此规则的值的大小必须与给定的 <em>value</em> 相同。对于字符串，<em>value</em> 代表字符的个数；对于数字，<em>value</em> 代表它的整数值，对于文件，<em>value</em> 代表文件以KB为单位的大小。</p>

<p><a name="rule-unique"></a></p>

<h4>unique:<em>table</em>,<em>column</em>,<em>except</em>,<em>idColumn</em></h4>

<p>验证此规则的值必须在给定的数据库的表中唯一。如果 <code>column</code> 没有被指定，将使用该域的名字。</p>

<p><strong>Unique 规则的基础使用</strong></p>

<pre><code>'email' =&gt; 'unique:users'
</code></pre>

<p><strong>指定列名</strong></p>

<pre><code>'email' =&gt; 'unique:users,email_address'
</code></pre>

<p><strong>强制忽略一个给定的 ID</strong></p>

<pre><code>'email' =&gt; 'unique:users,email_address,10'
</code></pre>

<p><a name="rule-url"></a></p>

<h4>url</h4>

<p>验证此规则的值必须是一个合法的 URL。</p>

<p><a name="custom-error-messages"></a></p>

<h2>定制错误消息</h2>

<p>如果有需要，您可以使用定制的错误消息代替默认的消息。这里有好几种定制错误消息的方法。</p>

<p><strong>传递定制消息到验证器</strong></p>

<pre><code>$messages = array(

    'required' =&gt; 'The :attribute field is required.',

);



$validator = Validator::make($input, $rules, $messages);
</code></pre>

<p><em>注意:</em> <code>:attribute</code> 占位符将被实际的进行验证的域的名字代替，您也可以在错误消息中使用其他占位符。</p>

<p><strong>其他验证占位符</strong></p>

<pre><code>$messages = array(

    'same'    =&gt; 'The :attribute and :other must match.',

    'size'    =&gt; 'The :attribute must be exactly :size.',

    'between' =&gt; 'The :attribute must be between :min - :max.',

    'in'      =&gt; 'The :attribute must be one of the following types: :values',

);
</code></pre>

<p>有些时候，您可能希望只对一个指定的域指定定制的错误消息：</p>

<p><strong>对一个指定的域指定定制的错误消息</strong></p>

<pre><code>$messages = array(

    'email.required' =&gt; 'We need to know your e-mail address!',

);
</code></pre>

<p>在一些情况下，您可能希望在一个语言文件中指定错误消息而不是直接传递给 <code>Validator</code>。为了实现这个目的，请在 <code>app/lang/xx/validation.php</code> 文件中添加您的定制消息到 <code>custom</code> 数组。</p>

<p><strong>在语言文件中指定错误消息</strong></p>

<pre><code>'custom' =&gt; array(

    'email' =&gt; array(

        'required' =&gt; 'We need to know your e-mail address!',

    ),

),
</code></pre>

<p><a name="custom-validation-rules"></a></p>

<h2>定制验证规则</h2>

<p>Laravel 提供了一系列的有用的验证规则；但是，您可能希望添加自己的验证规则。其中一种方法是使用 <code>Validator::extend</code> 函数注册定制的验证规则：</p>

<p><strong>注册一个定制的验证规则</strong></p>

<pre><code>Validator::extend('foo', function($attribute, $value, $parameters)

{

    return $value == 'foo';

});
</code></pre>

<blockquote><p><strong>注意:</strong> 传递给 <code>extend</code> 函数的规则的名字必须符合 "snake cased" 命名规则。</p></blockquote>

<p>定制的验证器接受三个参数：待验证属性的名字、待验证属性的值以及传递给这个规则的参数。</p>

<p>您也可以传递一个类的函数到 <code>extend</code> 函数，而不是使用闭包：</p>

<pre><code>Validator::extend('foo', 'FooValidator@validate');
</code></pre>

<p>注意您需要为您的定制规则定义错误消息。您既可以使用一个行内的定制消息数组，也可以在验证语言文件中进行添加。</p>

<p>您也可以扩展 <code>Validator</code> 类本身，而不是使用闭包回调扩展验证器。为了实现这个目的，添加一个继承自 <code>Illuminate\Validation\Validator</code> 的验证器类。您可以添加在类中添加以 <code>validate</code> 开头的验证函数：</p>

<p><strong>扩展验证器类</strong></p>

<pre><code>&lt;?php



class CustomValidator extends Illuminate\Validation\Validator {



    public function validateFoo($attribute, $value, $parameters)

    {

        return $value == 'foo';

    }



}
</code></pre>

<p>下面，您需要注册定制的验证器扩展：</p>

<p><strong>您需要注册定制的验证器扩展</strong></p>

<pre><code>Validator::resolver(function($translator, $data, $rules, $messages)

{

    return new CustomValidator($translator, $data, $rules, $messages);

});
</code></pre>

<p>当创建一个定制的验证规则，您有时需要为错误消息定义一个定制的占位符。为了实现它，您可以像上面那样创建一个定制的验证器，并且在验证器中添加一个 <code>replaceXXX</code> 函数：</p>

<pre><code>protected function replaceFoo($message, $attribute, $rule, $parameters)

{

    return str_replace(':foo', $parameters[0], $message);

}
</code></pre>
</body>
</html>